package me.jzn.alib.utils;

import android.os.Environment;

import androidx.annotation.Nullable;

import java.io.File;

import me.jzn.alib.ALib;
import me.jzn.core.utils.PathUtil;

public class AndrPathUtil extends PathUtil {
    @Nullable
    public static final File getSdcard() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            return Environment.getExternalStorageDirectory();
        }
        return null;
    }

    /**
     * /SDCard/Android/data/你的应用包名/cache/
     * 该方法路径下系统不一定会自动删除文件，所以需要手动设置使用的大小
     * getExternalCacheDir()路径不一定可用，因为，sd卡可能被卸载
     */
    public static final File getSdcardCacheDir() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            return ALib.app().getExternalCacheDir();
        }
        return null;
    }

    public static final File getSdcardFileDir() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            return ALib.app().getExternalFilesDir(null);
        }
        return null;
    }

    /**
     * @param path : Environment.DIRECTORY_DOWNLOADS
     */
    @Nullable
    public static final File getSdcardPubDir(String path) {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            return Environment.getExternalStoragePublicDirectory(path);
        }
        return null;
    }

    /**
     * /data/data/你的应用的包名/cache
     * /data/data/你的应用的包名/files
     * /data/data/你的应用的包名/code
     * 该方法可在代码中直接调用，这里只是做个例子，最好不要直接调用
     * 该目录主要用于存放缓存文件，当系统的内存存储空间紧张时，该目录下的文件会被删除掉。关于这些文件究竟会在存储空间剩余多少的情况，没有严格的标准保障。
     * 注意：你不应该依赖系统来清理这些缓存文件，你应该对这些缓存文件占用的最大存储空间设定个最大值，比如是1M，当实际占用空间超过这个值时，你应该对这些缓存文件做相应的清理工作（prune）。
     * <p>
     * 返回的路径可能会改变随着时间的推移,所以应该保存相对路径相对路径
     */
    public static final File getCacheDir() {
        return ALib.app().getCacheDir();
    }

    public static final File getSimpleCacheDir() {
        File file = getSdcardCacheDir();
        if (file == null) {
            return getCacheDir();
        }
        return file;
    }


    public static final File getPrefDir() {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            return new File(ALib.app().getDataDir(), "shared_prefs");
        } else {
            return new File(ALib.app().getFilesDir().getParent(), "shared_prefs");
        }
    }

    @Nullable
    public static final File getDbDir() {
        return ALib.app().getDatabasePath("dummy").getParentFile();
    }

    public static final File getPrefFile(String prefName) {
        return new File(getPrefDir(), prefName + ".xml");
    }

    public static final File getDbFile(String dbName) {
        return ALib.app().getDatabasePath(dbName);
    }
}
